package com.rr.study02.produto;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

public class ProdutoDaoJpa implements ProdutoDao{

	private EntityManager entManager;
	
	public EntityManager getEntManager() {
		return entManager;
	}

	public void setEntManager(EntityManager entManager) {
		this.entManager = entManager;
	}
	
	@Override
	public void salvar(Produto produto) {
		System.out.println("Entrou aqui: ProdutoDaoJpa.salvar");
		System.out.println("Produto: " + produto.getDescricao());
		entManager.persist(produto);
	}

	@Override
	public List<Produto> listar() {
		CriteriaBuilder criBuilder = entManager.getCriteriaBuilder();
		CriteriaQuery<Produto> criQuery = criBuilder.createQuery(Produto.class);
		Root<Produto> produtoRoot = criQuery.from(Produto.class);
		criQuery.select(produtoRoot);
		return entManager.createQuery(criQuery).getResultList();
	}

	@Override
	public void excluir(Produto produto) {
		entManager.remove(produto);
	}

	@Override
	public Produto pesquisarPorDescricao(String descricao) {
		Query consultaDescricao = this.entManager.createQuery("from Produto p where p.descricao like :descricao"); 
		consultaDescricao.setParameter("descricao", "%" + descricao + "%");
		@SuppressWarnings("unchecked")
		List<Produto> produtos = (List<Produto>) consultaDescricao.getResultList();
		return produtos.get(0);
	}

}
